package com.jade.bss.ec.ware;

import java.util.List;

import com.jade.bss.base.brand.Brand;
import com.jade.bss.base.category.Category;
import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 商品数据存储接口。
 */
public interface WareDao
{
    /**
     * 新增商品。
     *
     * @param ware 商品
     * @throws WareException 处理异常
     */
    public void addWare(Ware ware)
            throws WareException;

    /**
     * 更新商品信息。
     *
     * @param ware 商品
     * @throws WareException 处理异常
     */
    public void updateWare(Ware ware)
            throws WareException;

    /**
     * 删除商品。
     *
     * @param ware 商品
     * @throws WareException 处理异常
     */
    public void removeWare(Ware ware)
            throws WareException;

    /**
     * 获取商品信息。
     *
     * @param id 商品标识
     * @return 商品
     * @throws WareException 处理异常
     */
    public Ware getWare(long id)
            throws WareException;

    /**
     * 根据条件列出一个分类下面的所有商品。
     *
     * @param criteria 检索条件
     * @return 商品列表
     */
    public List<Ware> listWare(Criteria criteria);

    /**
     * 根据条件分页列出一个分类下面的所有商品。
     *
     * @param criteria 检索条件
     * @return 商品列表
     */
    public PagingList<Ware> queryWare(Criteria criteria);

    /**
     * 添加商品SKU信息。
     *
     * @param sku 商品SKU
     * @throws WareException 处理异常
     */
    public void addSku(WareSku sku)
            throws WareException;

    /**
     * 修改商品SKU信息。
     *
     * @param sku 商品SKU
     * @throws WareException 处理异常
     */
    public void updateSku(WareSku sku)
            throws WareException;

    /**
     * 删除商品SKU信息。
     *
     * @param sku 商品SKU
     * @throws WareException 处理异常
     */
    public void removeSku(WareSku sku)
            throws WareException;

    /**
     * 根据标识获取SKU信息。
     *
     * @param id SKU编号
     * @return SKU信息
     */
    public WareSku getSku(long id);


    /**
     * 根据条件列出SKU信息。
     *
     * @param criteria 查询条件
     * @return SKU列表
     */
    public List<WareSku> listSku(Criteria criteria);

    /**
     * 根据条件查询SKU信息。
     *
     * @param criteria 查询条件
     * @return SKU列表
     */
    public PagingList<WareSku> querySku(Criteria criteria);

    /**
     * 根据商品查询条件获取涉及的品牌。
     *
     * @param criteria 查询条件
     * @return 品牌列表
     */
    public List<Long> searchBrand(Criteria criteria);


    /**
     * 根据商品查询条件获取涉及的分类。
     *
     * @param criteria 查询条件
     * @return 分类列表
     */
    public List<Long> searchCategory(Criteria criteria);

}
